package com.scholarship.modules.student.mapper;

import com.scholarship.modules.student.dto.MajorInfoDto;
import com.scholarship.modules.student.dto.NApplicationDto.RewardSubmitDto;
import com.scholarship.modules.student.dto.NApplicationDto.RewardTypeDetailDto;
import com.scholarship.modules.student.dto.NApplicationDto.RewardTypeDto;
import com.scholarship.modules.student.entity.*;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author: huanghao
 * @date: 2021/7/22 14:23
 * @description:
 * @modifiedBy:
 */

@Repository
public interface NStuApplicationMapper {
    /*------------------get----------------*/
    //获取父类奖项列表
    List<RewardTypeDto> listRewardTypes();

    //获取子类奖项列表
    List<SonRewardDetailEntity> listRewardTypeDetails();

    //从t_table_info表获取子类奖项结构信息
    List<TableItem> listTableItemsByTableId(Integer tableId);

    //获取分值下拉框的信息
    List<DropdownItem> listDropdownItemsByFieldId(Integer fieldId);

    //获取t_reward_application表中某个记录的Id
    Integer getIdByUserIdAndTableId(String userId, Integer tableId);

    //通过tableId获取子类奖项存储记录对应表名（从t_reward_type_detail表）
    String getTableNameByTableId(Integer tableId);

    //通过tableId从t_reward_type_detail表中获取对应子类奖项信息
    RewardTypeDetailDto getRewardTypeDetailByTableId(Integer tableId);

    //从t_reward_application表中获取某个学生的所有申请记录
    List<RewardApplicationRecord> listStudentRewardRecordsByUserId(String userId);

    //通过id，从t_reward_type表里获取某个父类奖项的信息

    //从v_stu_application视图中获取某个学生所有的奖学金申请信息
    List<StuApplicationViewEntity> listStuendApplicationRecordByUserId(String userId);

    //获取学生申请表提交状态
    Integer getStuApplicationState(String userId);

    //获取奖学金申请时间范围
    ApplicationTime getStuAppicationTime();

    /*------------------insert----------------*/
    //向t_reward_application表插入空白记录（只包含UserId和TableId）
    Integer insertRewardApplicationRecord(String userId, Integer tableId);

    //向某表插入空白记录（只包含userId）
    Integer insertRewardTableRecord(String tableName, String userId);

    //向子类表项对应的table插入记录，如果记录已存在则更新记录
    Integer insertRewardTableByRewardSubmitDto(RewardSubmitDto rewardSubmitDto);

    //向t_reward_application表插入记录，如果记录已存在则更新记录
    Integer insertRewardApplicationByRewardSubmitDto(RewardSubmitDto rewardSubmitDto);

    //向t_reward_feedback表插入记录，如果记录已存在，则更新
    Integer insertRewardFeedbackByReward(RewardSubmitDto rewardSubmitDto);

    /*------------------update----------------*/
    //更新t_reward_feedback表中学生的预估分
    Integer updateStuRatingOfRwardFeedback(String userId, Float studentRating);

    //根据userId，更新学生奖学金申请状态
    Integer updateStuApplicationState(String userId, Integer state);

    /*------------------delete----------------*/
    //根据userId，删除学生在Feedback表中的记录
    Integer deleteStuFeedbackRecord(String userId);

    /*------------------------测试-----------------------*/
    //测试
    MyEntity testFunc(Integer id);
}
